package com.wyy.dao;

import com.wyy.domain.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * created by 伍猷煜 on 2022/5/21 15:26 星期六
 */
public interface UserDao {

    List<User> findAll();

    // 单个参数
    User findById(Integer id);

    // 多参传递 https://blog.csdn.net/weixin_45433031/article/details/123208290
    //        https://blog.csdn.net/weixin_45101989/article/details/122400859
    // 多个参数 1、顺序传参法 sql层表达不直观，且一旦顺序调整容易出错。
    // jdk1.7 #{0} or sex = #{1}
    // jdk1.8 #{param1} or sex = #{param2}
    User findByManyParams1(String username, String sex);

    // 多个参数 2、@Param注解传参法（推荐）参数不多的情况还是比较直观的，推荐使用
    // 当接口中只有一个参数(并且没有用@Param())时候，需要在xml中添加响应的参数类型parameterType；
    // 如果是多个参数(每个参数都是用@Param())的时候，就不会去读参数类型parameterType，直接取得参数里面的值。
    User findByManyParams2(@Param("username") String username, @Param("sex") String sex);

    // 多个参数 3、Map传参法（推荐）适合传递多个参数，且参数易变能灵活传递的情况。
    // #{}里面的名称对应的是Map里面的key名称。
    User findByManyParams3(Map<String, Object> params);

    // 多个参数 4、java bean传参法（推荐）这种方法很直观，但需要建一个实体类，扩展不容易，需要加属性，看情况使用。
    // #{}里面的名称对应的是User类里面的成员属性。
    User findByManyParams4(User user);

    List<User> findLikeName(String username);

    // 查询user总数
    Integer findTotalId();

    void save(User user);

    void update(User user);

    Long updateAndReturn(User user);

    void delete(Integer uid);

}
